package com.runtime.hongyunmanage.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.runtime.hongyunmanage.bean.Productdetails;
import com.runtime.hongyunmanage.bean.ProductImage;
import com.runtime.hongyunmanage.bean.Products;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface ProductMapper extends BaseMapper<Products> {


    List<Products> findProductByCondition(@Param("pageSize") int pageSize, @Param("offset") int offset, @Param("products") Products products);
    int CountProducts(Products products);
    List<Products> findProductsWithDetails( @Param("pageSize") int pageSize, @Param("offset") int offset, @Param("products") Products products);
    // 商品上架
    void publishProduct(Integer productId);

    // 商品下架
    void unpublishProduct(Integer productId);

    // 商品信息编辑 - 基础信息
    void updateProductBasicInfo(Products product);

    // 商品信息编辑 - 详细信息 - 更新描述和规格
    void updateProductDetailInfo(Productdetails details);

    // 查询商品的所有图片
    List<ProductImage> getImagesByProductId(@Param("productId") Long productId);
    //商品信息编辑 - 更新图片
    // 删除图片
    void deleteImages(@Param("imageIds") List<Long> imageIds);

    // 插入新图片
    void insertNewImages(@Param("images") List<ProductImage> images);

    // 更新图片排序
    void updateImageSortOrder(@Param("images") List<ProductImage> images);
    void editProductDetailInfoImages(Integer productId, List<ProductImage> images);

    // 库存预警检查
    List<Products> checkStockAlert();

    // 按商品 ID 查询
    Products findProductById(Integer productId);

    // 按商品编号查询
    Products findProductByNumber(String productNumber);

    // 按商品名称模糊查询
    List<Products> findProductsByName(String productName);

    // 按分类查询
    List<Products> findProductsByCategory(Integer categoryId);

    // 商品新增 - 插入商品基础信息
    @Insert("INSERT INTO products (productNumber, productName, categoryId, price, stock, stockAlertThreshold, isPublished, createdAt, updatedAt) " +
            "VALUES (#{productNumber}, #{productName}, #{categoryId}, #{price}, #{stock}, #{stockAlertThreshold}, #{isPublished}, NOW(), NOW())")
    @Options(useGeneratedKeys = true, keyProperty = "productId") // 关键配置
    void addProductBaseInfo(Products product);

    // 商品新增 - 插入商品详细信息
    void addProductDetailInfo(Productdetails details);

    // 商品新增 - 插入商品图片信息
    void addProductImages(@Param("productId")Long productId,@Param("images") List<ProductImage> images);

    // 商品删除 - 删除商品图片信息
    void deleteProductImages(Integer productId);

    // 商品删除 - 删除商品详细信息
    void deleteProductDetails(Integer productId);

    // 商品删除 - 删除商品基础信息
    void deleteProductBaseInfo(Integer productId);
}